﻿

#include <iostream>
using namespace std;

#include <string>


//int main()
//{
//	string s("this is a test!");
//	cout << s.size() << endl;
//	cout << s.capacity() << endl;
//
//	printf("%p: s.begin() %p: s.end() %p\n", &s[0], &s[0], (&s[0])+16);
//
//	const char* ps = s.c_str();
//	printf("%p\n", ps);
//
//	return 0;
//}

//int main(int argc, char* argv[])
//{
//
//	string a = "hello world";
//	string b = a;
//
//	if (a.c_str() == b.c_str())
//	{
//		cout << "true" << endl;
//	}
//	else 
//		cout << "false" << endl;
//
//	string c = b;
//	c = "";
//	if (a.c_str() == b.c_str())
//	{
//		cout << "true" << endl;
//	}
//	else 
//		cout << "false" << endl;
//
//	a = "";
//	if (a.c_str() == b.c_str())
//	{
//		cout << "true" << endl;
//	}
//	else 
//		cout << "false" << endl;
//
//	return 0;
//
//}

//int main()
//{
//	string str("Hello Bit.");
//
//	str.reserve(111);
//	str.resize(5);
//	str.reserve(50);
//
//	cout << str.size() << ":" << str.capacity() << endl;
//	
//	return 0;
//}


//int main(int argc, char* argv[])
//{
//	string strText = "How are you?";
//	string strSeparator = " ";
//	string strResult;
//	int size_pos = 0;
//	int size_prev_pos = 0;
//
//	while ((size_pos = strText.find_first_of(strSeparator, size_pos)) != string::npos)
//	{
//		strResult = strText.substr(size_prev_pos, size_pos - size_prev_pos);
//		cout << strResult << " ";
//
//		size_prev_pos = ++size_pos;
//	}
//
//	if (size_prev_pos != strText.size())
//	{
//		strResult = strText.substr(size_prev_pos, size_pos - size_prev_pos);
//
//		cout << strResult << " ";
//	}
//
//	cout << endl;
//
//	return 0;
//}


//class Solution 
//{
//public:
//    int myAtoi(string str) 
//    {
//        const char* dst = "+-";
//        int flag = 1, pos = 0;
//        if ((pos = str.find_first_of(dst)) != string::npos)
//        {
//            flag = str[pos] == '+' ? 1 : -1;
//        }
//
//        string ans;
//        for (int i = 0; i < str.size(); ++i)
//        {
//            if (isdigit(str[i]))
//            {
//                for (; i < str.size(); ++i)
//                {
//                    if (isdigit(str[i]))
//                        ans += str[i];
//                    else
//                        break;
//                }
//                break;
//            }
//        }
//
//
//        size_t ret = 0;
//        ret = stoi(ans, nullptr, 10);
//
//        return ret * flag;
//    }
//};
//
//int main()
//{
//    string str("   -42");
//
//
//    int ret = Solution().myAtoi(str);
//   
//    return 0;
//}


//class Solution {
//public:
//    string addStrings(string num1, string num2) {
//        string ans;
//
//        reverse(num1.begin(), num1.end());
//        reverse(num2.begin(), num2.end());
//
//        int flag = 0;
//        int i = 0, j = 0;
//        while (!(num1[i] == 0 && num2[j] == 0 && flag == 0))
//        {
//            int a1 = (num1[i] == 0 ? '0' : num1[i]) - '0';
//            int a2 = (num2[j] == 0 ? '0' : num2[j]) - '0';
//
//            int add = a1 + a2 + flag;
//            flag = add / 10;
//            add %= 10;
//            ans += (add + '0');
//
//            if (i != num1.size())
//                ++i;
//            if (j != num2.size())
//                ++j;
//        }
//
//        reverse(ans.begin(), ans.end());
//
//        return ans;
//    }
//};


//int main()
//{
//    string str;
//    str.reserve(5000);
//    getline(cin, str);
//
//    int find = str.find_last_of(" ");
//    cout << str.size() - (find + 1) << endl;
//
//    return 0;
//}


//class Solution {
//public:
//    bool isPalindrome(string s) {
//        string str;
//        for (auto ch : s)
//        {
//            if (isdigit(ch) || isalpha(ch))
//            {
//                if (ch >= 'A')
//                {
//                    str += ch + 32;
//                    cout << str << " ";
//                }
//                else
//                {
//                    str += ch;
//                }
//            }
//        }
//
//        string re_str = str;
//        reverse(re_str.begin(), re_str.end());
//        for (int i = 0; i < str.size(); ++i)
//        {
//            if (str[i] != re_str[i])
//                return false;
//        }
//
//        return true;
//    }
//};
//
//int main()
//{
//    string s1("A man, a plan, a canal: Panama");
//
//    Solution().isPalindrome(s1);
//
//    return 0;
//}

class Sln {
public:
    string reverseStr(string s, int k) {
        int k_beg = 0, k_end = 0;
        int cnt = 1;
        int sz = s.size();

        for (int i = 0; i < sz; ++i)
        {
            if (cnt % k == 0 && cnt % (2 * k) != 0)
            {
                k_end = i;

                if (sz - (i + 1) < k)
                {
                    reverse(s.begin() + k_beg, s.begin() + k_end + 1);

                    reverse(s.begin() + i + 1, s.end());
                    return s;
                }
            }

            if (cnt % (2 * k) == 0)
            {
                reverse(s.begin() + k_beg, s.begin() + k_end + 1);

                if (sz - (i + 1) > k - 1 && sz - (i + 1) < 2 * k)
                {
                    reverse(s.begin() + i + 1, s.begin() + i + 1 + k);
                    return s;
                }

                if (sz - (i + 1) < k)
                {
                    reverse(s.begin() + i + 1, s.end());
                    return s;
                }

                k_beg = i + 1;
            }
            ++cnt;
        }

        return s;
    }
};

int main()
{
    Sln().reverseStr(string("abcd"), 3);


    return 0;
}